package meta

import (
	"gitee.com/micro-plat/codeless/apiserver/meta/biz/meta"
	"github.com/micro-plat/hydra"
)

func SetPageHandle(ctx hydra.IContext) (r interface{}) {
	if err := ctx.Request().Check("name", "content"); err != nil {
		return err
	}
	tenantID := ctx.Request().GetInt("tenant_id")
	id := ctx.Request().GetInt64("id")
	name := ctx.Request().GetString("name")
	content := ctx.Request().GetString("content")
	if id == 0 {
		page, err := meta.GetPageByName(tenantID, name)
		if err != nil {
			return err
		}
		id = page.GetInt64("id")
	}

	//添加或更新
	var err error
	if id == 0 {
		if id, err = meta.AddPage(tenantID, name, content); err != nil {
			return err
		}
	} else {
		err = meta.UpdatePage(tenantID, id, name, content)
	}
	if err != nil {
		return err
	}

	//返回结果
	page, err := meta.GetPageByID(tenantID, id)
	if err != nil {
		return err
	}
	return page
}

func GetPageByNameHandle(ctx hydra.IContext) interface{} {
	if err := ctx.Request().Check("name"); err != nil {
		return err
	}
	tenantID := ctx.Request().GetInt("tenant_id")
	name := ctx.Request().GetString("name")
	page, err := meta.GetPageByName(tenantID, name)
	if err != nil {
		return err
	}
	return page
}

// AddPageHandle 添加页面的HTTP处理函数
func AddPageHandle(ctx hydra.IContext) (r interface{}) {
	if err := ctx.Request().Check("name", "content"); err != nil {
		return err
	}
	tenantID := ctx.Request().GetInt("tenant_id")
	name := ctx.Request().GetString("name")
	content := ctx.Request().GetString("content")
	id, err := meta.AddPage(tenantID, name, content)
	if err != nil {
		return err
	}
	page, err := meta.GetPageByID(tenantID, id)
	if err != nil {
		return err
	}
	return page
}

// UpdatePageHandle 更新页面的HTTP处理函数
func UpdatePageHandle(ctx hydra.IContext) (r interface{}) {
	if err := ctx.Request().Check("id", "name", "content"); err != nil {
		return err
	}
	tenantID := ctx.Request().GetInt("tenant_id")
	id := ctx.Request().GetInt64("id")
	name := ctx.Request().GetString("name")
	content := ctx.Request().GetString("content")
	err := meta.UpdatePage(tenantID, id, name, content)
	if err != nil {
		return err
	}
	page, err := meta.GetPageByID(tenantID, id)
	if err != nil {
		return err
	}
	return page
}
